﻿/**
 * @file SEACavityWapper.h
 * @brief SEA声腔 相关的python接口
 * @author wangning (2185896382@qq.com)
 * @date 2024-11-25
 */
#ifndef _PY_SEA_CAVITY_WAPPER_H___
#define _PY_SEA_CAVITY_WAPPER_H___

#include <QString>
#include <QObject>
#include "PythonInterfaceAPI.h"
#include "FITK_Component/FITKAcousticsModel/PyFITKSEACavity.h"


class SEACavity : public Acoustics::PyFITKSEACavity
{
public:
    explicit SEACavity(const QString& name);
    explicit SEACavity();
    virtual ~SEACavity() = default;

};

class  PythonInterfaceAPI SEACavityWapper : public QObject
{
    Q_OBJECT
public slots:
    SEACavity* new_SEACavity();

    void delete_SEACavity(SEACavity* obj);
    /**
     * @brief 在Python解释器中通过名称获取对象
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    SEACavity* static_SEACavity_GetSEACavity(const QString& name);
    /**
     * @brief 添加面
     * @param[i]  shellId：面的ID
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void addShell(SEACavity* obj, const QString& shellName);
    /**
     * @brief 创建声腔
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void createCavity(SEACavity* obj);
    /**
     * @brief 获取名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    QString getName(SEACavity* obj);
    /**
     * @brief 设置名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void setName(SEACavity* obj, const QString& name);
    /**
     * @brief 设置流体材料
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void setFiuld(SEACavity* obj, const QString& name);
    /**
     * @brief 设置阻尼
     * @param[i]  damping：阻尼名称  如果不输入名称，则使用噪音控制处理的吸收类型（Noise Control Treatments）
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void setDamping(SEACavity* obj, const QString& damping=QString());
    /**
     * @brief     判断靠近声腔的一面
     * @param[i]  name：板的名称
     * @return    0:内部声学包，1:外部声学包, -1出错
     * @author    wangning (2185896382@qq.com)
     * @date      2024-11-25
     */
    int getNCT_In_or_Out(SEACavity* obj, const QString& name);
    /**
     * @brief 设置体积面积周长重载
     * @param[i]  type：1:体积 2:面积 3:周长
     * @param[i]  is：是否启用重载
     * @param[i]  overridee：重载后的数值
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void setGeometryProp(SEACavity* obj, int type,bool is,double overridee = 0) ;
    /**
     * @brief 设置是否启用SEA的解决方案
              设置是否启用模态密度及启用类型
     * @param[i]  isSolution：是否启用波在SEA的解决方案
     * @param[i]  isModalDensity：是否启用波的模态密度
     * @param[i]  modalDensity：模态密度类型
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    void setSEAMatrixSolution_ModalDensity(SEACavity* obj, bool isSolution, bool isModalDensity, const QString& modalDensity = QString());
    /**
     * @brief 获取体积面积周长
     * @param[i]  overridee：0获取原始周长，1获取重载周长
     * @author wangning (2185896382@qq.com)
     * @date 2024-11-25
     */
    QString getGeometryProp(SEACavity* obj,int overridee=1);

private:
    void initShell(SEACavity* cavity);
};

#endif
